package com.dmbjz.webdemo.config;

import com.dmbjz.webdemo.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.function.RequestPredicates;
import org.springframework.web.servlet.function.RouterFunction;
import org.springframework.web.servlet.function.RouterFunctions;
import org.springframework.web.servlet.function.ServerResponse;

@Configuration
public class WebRouterFunctioConfig {


    /**
     * 给容器放一个声明函数式Web的路由信息的 bean，取代以往的 Controller 写 xxxMapping
     * 参数传递为具体的业务执行方法（例如 service）
     * <p>
     *
     * @Bean 中的传参会被 Spring 自动注入
     */
    @Bean
    public RouterFunction<ServerResponse> userRoute(UserService userService) {


        /**
         * 参数声明：
         * route()：创建路由信息
         * @RouterFunction：定义路由信息
         * @RequestPredicate： 定义请求规则（请求参数类型、请求谓语）
         * @ServerRequest：请求内容
         * @ServerResponse：返回结果
         */
        return RouterFunctions.route()
                .GET("/user/{id}", RequestPredicates.all(), userService::getUser)
                //要求携带参数 name，且参数数值必须是 dmbjz
                .GET("/userAdmin", RequestPredicates.all().and(RequestPredicates.param("name","dmbjz")), userService::getUser)
                .GET("/users", userService::getUserList)
                .POST("/users", RequestPredicates.contentType(MediaType.APPLICATION_JSON), userService::saveUser)
                .PUT("/users/{id}", RequestPredicates.contentType(MediaType.APPLICATION_JSON), userService::updateUser)
                .DELETE("/user/{id}", userService::delUser)
                .build();

    }


}
